package com.cskaoyan.basic.variable;

/*
      可不可以在一次运算中，包含多种不同数据类型的值呢？ 可以
      jvm是如何计算的呢？
      a. jvm 每次运算的时候，只会针对相同数据类型的两个值来进行运算
      b. 如果针对两个不同数据类型的值进行运算，jvm会将 小数据类型的值 ——> 大数据类型的值 在运算
          byteValue  + intValue
          byteValue ——> 转化成要给int数据类型的值 + intValue

      在该运算过程中，包含了隐式数据类型转化 小数据类型的值  ——> 大数据类型的值
      1. boolean类型的值不能直接转化为其它数据类型的值
      2. byte,short,char—>int—>long—>float—>double
      3. byte,short,char相互之间不转换，他们参与运算首先转换为int类型


      编译器默认禁止 大数据类型的值 ——> 小数据类型的值， 可能会丢失数据的精度，产生错误的数据
      可以通过，数据类型的强制转化，完成大数据类型的值 ——> 小数据类型的值
      目标类型 变量名=(目标类型)(被转换的数据);
       byte b = (byte)a;
 */
public class Demo2 {

    public static void main(String[] args) {
        byte byteValue = 1;

        int intValue = 10;

        long longValue = 100;

        double doubleValue = 100.0;

        // 加法运算的结果保存在double变量中
        //              byteValue —> int +  intValue （结果1 int 类型)
        //              结果1 ——> long + longValue （结果2 long 类型）
        //              结果2 ——> double + doubleValue（最终结果 double）
        double result = byteValue + intValue + longValue + doubleValue;


        byte b = 1;
        int a = 130;

        // 赋值, 编译器禁止我们，大的数据类型的值 ——> 小数据类型的值
        b = (byte) a;
        // int: 00000000 00000000 00000000 10000010
        // byte: 10000010   补码表示
        //       11111110   2^7 - 1 = -126
        System.out.println(b); // -126

        // 一个整数常量值，默认是属于int数据的值
        int a1 = 1;
        // 一个小数常量值，默认是属于double数据类型的值
        double d1 = 3.14;
        // 3.14 属于double类型，这里的转化 double ——> float
        float f = (float) 3.14;
    }
}
